Mise α jour : 03 Fevrier 1997 .

Initiation α la programmation en Turbo PASCAL

TP NumΘro 1

TΘlΘchargement !
UN.PAS

program un; {Mon premier programme en Pascal}
USES CRT;
Var a:char; {DΘclare la variable 'a' comme un caractere}
Begin
    clrscr; {efface l'Θcran}
    writeln('Bonjour les amis'); {Affiche 'Bonjour les amis' α l'Θcran}
    a:=readkey; {attente d'une touche clavier}
End.

Lancez le programme en cliquant sur RUN. Le programme va etre compilΘ et exΘcutΘ . En cas d'erreur de syntaxe, vΘrifiez bien votre listing (n'oubliez pas la ponctuation ; , . (etc))
Attention , le compilateur ne s'arrete pas toujours sur la cause de l'erreur, il faut parfois regarder la ligne prΘcΘdente ! Souvent vous oublierez un point virgule ou un point sur la ligne prΘcΘdente.


TP NumΘro 2

TΘlΘchargement !
DEUX.PAS

program deux; {Initiation Turbo Pascal}
USES CRT;
Var a:char;
ma_chaine:STRING; {'ma_chaine'est dΘclarΘe comme chaine de caractΦres}
Begin
    clrscr; {efface l'Θcran}
    writeln('Entrez un texte de moins de 255 caractΦres');
    writeln('Puis appuyez sur entrΘe');
    readln(ma_chaine); {Lecture de caractΦres au clavier}
    writeln;
    write('Ce que vous venez de taper est : ');
    writeln(ma_chaine);
    a:=readkey; {attente d'une touche}

    {Note : writeln permet de faire un passage α la ligne α
    la diffΘrence de write qui permet d'Θcrire α la suite}

End.
Lancez le programme en cliquant sur RUN.
'ma_chaine' est une variable ou vous pourrez stoker du texte.
Si vous utilisez une variable non dΘclarΘe, le compilateur affichera un message d'erreur (et oui c'est pas du Basic !).



TP NumΘro 3

TΘlΘchargement !
TROIS.PAS

Sans structure de contr⌠le, un langage de programmation serait bien limitΘ (Du genre HTML par ex) . Voici donc pour commencer le programme TROIS.PAS qui contient 2 boucles :

-La premiΦre For I=1 to 100 ..... permet d'Θxecuter 100 fois des instructions. On aurait pu Θcrire aussi For i=200 to 999 ou for i=1 to 4 pour rΘaliser 800 ou 4 itΘrations ...

-La seconde Repeat ... until est exΘcutΘe tant que l'on n'appuie pas sur la touche 1. On pourrait trΦs bien mettre une autre condition de sortie .

program trois; {Les structures de controle}
USES CRT;

Var a:char;
i: Integer; {Declare i comme un nombre entier}

Begin
    clrscr; {efface l'ecran}
    for i:=1 to 100 do
    begin
      write('i=',i,' ');
      {Toutes les instructions que vous mettrez ici seront executΘes 100 fois}
    End;
    a:=readkey; {attente d'une touche}

    repeat
      writeln('Appuyez sur 1 pour sortir cette boucle');
      a:=readkey;
      writeln('Code de la touche :',ord(a));
    Until a='1';
End.



TP NumΘro 4

TΘlΘchargement !
QUATRE.PAS

Structure de contr⌠le suite : IF condition THEN action ELSE autre_action.
SI (la condition est vraie) ALORS j'exΘcute action SINON j'exΘcute autre_action.
Voici un programme d'exemple : Il suffit de le lire et l'ΘxΘcuter pour comprendre :

program Quatre;     {Les structures de controle suite}

USES CRT;

Var a:char;
    ma_chaine:STRING; {'ma_chaine'est declaree comme chaine de caracteres}
    i: Integer;       {Declare i comme un nombre entier}

Begin
  clrscr;     {efface l'écran}
  { La struture de controle IF (condition) THEN action ELSE action }
  writeln(' EXEMPLE 1: IF sans ELSE :');
    writeln('Tapez sur la touche A ou la touche B (echap pour sortir)');

  repeat
    a:=UPCASE(readkey);   {Upcase transforme une lettre minuscule en majuscule}
    if a ='A' THEN
    Begin
       writeln('Vous avez appuye sur la touche A');
    End;
    if a ='B' THEN
    Begin
       writeln('Vous avez appuye sur la touche B');
    End;
  until ord(a) = 27;  {code ascii de touche ECHAP =27}


  writeln(' EXEMPLE 2: IF avec ELSE :');
   writeln('Tapez sur la touche A ou autre (echap pour sortir)');

  repeat
    a:=UPCASE(readkey);   {Upcase transforme une lettre minuscule en majuscule}
    if a ='A' THEN
    Begin
       writeln('Vous avez appuye sur la touche A');
    End        {Remarquez qu'il n'y a pas de point virgule ici}
    Else       {c'est que a<>'A'}
    Begin
       writeln('Vous avez appuye sur une autre touche ');
    End;
  until ord(a) = 27;  {code ascii de touche ECHAP =27}

End.



TP NumΘro 5

TΘlΘchargement !
CINQ.PAS

Et maintenant , nous allons faire notre premier petit jeu ! Nous utilisons quelques instructions supplΘmentaires (Trunc , random...) mais cela n'est pas compliquΘ α comprendre !
NOTE : Random renvoie un nombre rΘel d'o∙ l'obligation de dΘclarer la variable nb_alea comme REAL . Pour obtenir ensuite uniquement la partie entiΦre, nous utilisons TRUNC qui renvoie lui un entier (d'ou la dΘclaration de nb_recherche comme INTEGER)

program Cinq;     {Mon premier petit jeu}

USES CRT;

Var a:char;
    ma_chaine:STRING; {'ma_chaine'est declaree comme chaine de caracteres}
    i,nb,inf,sup,nb_recherche: Integer;
    nb_alea:real;
BEGIN

  textcolor(Yellow);    {Couleur du texte entre 0 (black) et 15 (white)}
  textbackground(Blue); {Couleur du fond entre 0 (black) et 8 }
  clrscr;
  inf:=0;
  sup:=100;
  randomize;   {pour avoir un nb alΘatoire different a chaque lancement
                          du programme}
  nb_alea :=random(100); {Initialise un nombre alΘatoire &Lt 100 }
  nb_recherche:=TRUNC(nb_alea); {Prend la partie entiΦre}

  writeln('Objectif du jeu : trouver un nombre cachΘ ');
  writeln('Pour arreter le jeu tapez un nombre > 100');

  repeat

    writeln('Entrez un nombre compris entre ',inf,' et ',sup);
    readln(nb);
    if nb > nb_recherche then  sup:=nb; {Pour rΘduire l'intervale}
    if nb &Lt nb_recherche then  inf:=nb;

  until (nb=nb_recherche) or (nb > 100); {conditions de sortie}

  if nb=nb_recherche then
  Begin
    writeln('BRAVO ! Vous avez gagnΘ !');
    sound(440);  {jouer un son}
    Delay(500);
    nosound;
    a:=readkey;
  End;

END.



TP NumΘro 6

TΘlΘchargement !
SIX.PAS

Programme de RESOLUTION D'UNE EQUATION DU SECOND DEGRE.
La gestion des erreurs de frappes est mieux gΘrΘe ici grΓce α l'utilisation de l'instruction VAL qui permet de rΘcupΘrer la valeur numΘrique d'une variable de type Chaine (string) (En effet , si vous faites readln(a), avec a variable numΘrique, si vous entrez au clavier 'toto', le programme plante. Par contre, avec readln(a1), a1 dΘclarΘ comme string, si vous entrez 'toto', le programme ne plante plus .
Remarque : VAL('Toto',a,err) renvoie dans a la valeur 0
mais VAL('123',a,err) renvoie dans a la valeur 123 ...nuance !
Err est un paramΦtre obligatoire mais ici inutile.

Note : Pour les ΘlΦves de Terminale : Essayez de modifier le programme pour trouver les solutions dans C .

program Six;     {rΘsolution d'une Equation}

USES CRT;

Var ch:char;
    err : integer;
    {*** Variable pour mes equations *****}
    A1,B1,C1,Xm1,Xm2 : STRING;
    A,B,C,DELTA,X1,X2 : Real;
BEGIN

  textcolor(Yellow);    {Couleur du texte entre 0 (black) et 15 (white)}
  textbackground(Blue); {Couleur du fond entre 0 (black) et 8 }
  clrscr;
  repeat
    writeln;
    writeln;
    writeln('RΘsolution d''une Equation du Second degrΘ ');
    writeln('Du type Ax^2+Bx+c = 0');
    writeln('Vous devez entrer les coefficient A,B et C');
    Write('Entrez A :');
    readln(A1);
    VAL(A1,A,err);   {A1 string est transformΘe en A valeur numΘrique integer}

    Write('Entrez B :');
    readln(B1);
    VAL(B1,B,err);   {B1 string est transformΘe en B valeur numΘrique integer}

    Write('Entrez C :');
    readln(C1);
    VAL(C1,C,err);   {C1 string est transformΘe en C valeur numΘrique integer}

    DELTA := B*B-(4*A*C);
    IF (DELTA < 0) THEN
    Begin
      Writeln('Pas de solution dans R, Delta nΘgatif =',DELTA);
    End
    ELSE
    IF (A = 0) THEN
    Begin
      Writeln('A = 0, ce n'est pas une Equation du second degrΘ');
    END
    ELSE
    BEGIN
      X1:=(-B-SQRT(DELTA))/(2*A);
      X2:=(-B+SQRT(DELTA))/(2*A);
      writeln(' Les solutions sont :');
      writeln(' X1 = ',X1);
      writeln(' X2 = ',X2);
      str(X1:10:3,Xm1);  {Valeur X1 transformΘe en chaine caractΦre Xm1}
      str(X2:10:3,Xm2);  {10 et 3 reprΘsente formatage c-a-d le nb de chiffre avant et
                          aprΦs la virgule}
      writeln('Et de faτon plus lisible :');
      writeln(' X1 = ',Xm1);
      writeln(' X2 = ',Xm2);
    END;
    Writeln('Voulez vous sortir ? (O/N)');
    ch:=readkey;
  Until (UPCASE(ch)='O') OR (ORD(ch)=27);   {O ou Echap pour sortir}
END.


Avant de faire du graphisme, on va quand mΩme voir la notion de procedures (sous programmes).


TP NumΘro 7

TΘlΘchargement !
SEPT.PAS

NOTIONS DE PROCEDURES

Une procedure est un sous programme que l'on peut appeler plusieurs fois α partir du programme principal ou d'une autre procedure ou fonction. Dans notre exemple nous avons dΘclarΘ 4 procedures (totot1 α toto4) appelΘes α partir du programme principal.
Dans une procedure , vous pouvez dΘclarer des variables locales qui seront crΘes α chaque appel de la procedure et dΘtruites α la fin de l'exΘcution de la procedure.
Les variables globales (declarΘes au debut de votre programme) sont aussi utilisables dans les procedures .
Attention : si vous redΘclarer la variable Glob1 (variable globale) dans une procedure, le compilateur va accepter mais il faut savoir alors que Glob1-variable globale- n'est plus accessible par la dite procedure. En effet c'est une variable Glob1 locale qui est crΘe et diffΘrente de Glob1 globale (bien que portant le mΩme nom !)

Analysez le programme ci-dessous , testez le et faites des modifications pour essayer de bien comprendre.
Essayez d'appeler la procedure toto1 par toto2.
program Sept;     {Appel de procedures}

USES CRT;

{*** Les variables globales de mon programme sont declarees ici ***}
Var ch:char;
    err : integer;
    glob1,glob2: integer;

{*** Déclaration de mes procedures ***}
Procedure Toto1;
Begin
  writeln;
  writeln('Execution de la procedure Toto1');
  writeln(' J''affiche n''importe quoi ');
  writeln('... et on sort de la procedure toto1');
  writeln;
End;

Procedure Toto2;
Var a,b : Integer; { a et b variables locales ne sont connues que par la procedure toto2}
Begin
  a:=10;
  b:=15;
  writeln;
  writeln('Execution de toto2');
  writeln('a = ',a);
  writeln('b = ',b);
  writeln('Fin d''execution de toto2');
  writeln;
End;

Procedure Toto3(x,y : integer );
Begin
  writeln;
  writeln('Execution de toto3: x et y sont passΘs en  paramΦtres');
  writeln('x= ',x);
  writeln('y= ',y);
  x:=x+y;
  writeln('Je modifie la valeur de x :');
  writeln('x:=x+y = ',x);
  writeln('Fin d''execution de toto3');
  writeln;
End;

Procedure toto4(x,y : integer);
Var a,b : real;  {variables de type reel declarΘes en local}
Begin
  writeln;
  writeln('Execution de toto4');
  b:=100;
  a:=glob1+glob2+b;  {Je peux utiliser glob1 et glob2 dans mes procΘdures }
  writeln('Dans toto4 a = ',a);
  writeln('Fin de toto4');
  writeln;
End;


BEGIN

  textcolor(Yellow);    {Couleur du texte entre 0 (black) et 15 (white)}
  textbackground(Blue); {Couleur du fond entre 0 (black) et 8 }
  clrscr;

  repeat
   clrscr;
    { Appel de la procedure toto1 }
    toto1;
    { Appel de la procedure toto2 }
    toto2;

   {Appel de la procedure toto3 avec 2 parametres: Glob1 et Glob2 }
    glob1:=10;
    glob2:=20;

    toto3(glob1,glob2);
    writeln('... mais Glob1 et glob2 ont gardé leur valeur');
    writeln('Glob1 = ',glob1);
    writeln('Glob2 = ',glob2);
    writeln('Appuyez sur une touche pour executer toto4');
    ch:=readkey;
    toto4(glob1,glob2);
    Writeln('Voulez vous sortir ? (O/N)');
    ch:=readkey;
  Until (UPCASE(ch)='O') OR (ORD(ch)=27);   {O ou Echap pour sortir}
END.

NOTE : Naturellement nous n'avons pas fait le tour de la question au sujet des procedures (loin s'en faut ...) mais c'est largement suffisant pour commencer !


TP NumΘro 8

TΘlΘchargement !
HUIT.PAS


LES GRAPHISMES

Voici comment initialiser le mode graphique haute rΘsolution en Turbo Pascal . J'ai mis quelques instructions de base pour rΘaliser des lignes changer les couleurs ... etc .
Les coordonnΘes de l'Θcran (0,0) commencent en haut α gauche.

Notes Importantes :

1) Vous devez spΘcifier le chemin d'accΦs du rΘpertoire BGI de Turbo Pascal (cela dΘpend de votre installation) dans l'appel d'initgraph, sans quoi τα ne marche pas !

2) Si votre compilateur affiche "graph.tpu" non trouvΘ, recherchez ce fichier dans le rΘpertoire Units et recopiez le dans votre rΘpertoire courant (o∙ se trouve votre programme) . Vous pouvez aussi spΘcifier les chemins d'accΦs des .exe et Tpu dans "directories" du menu option de Turbo pascal.

3) A l'avenir, si vous rencontrez ce genre de problΦme, faites tout d'abord BUILD (au lieu de COMPILE) puis si le pb persiste recherchez et recopiez les fichiers dans le rΘpertoire courant.

Le programme :
PROGRAM Huit;     {Programme graphique}

USES CRT,Graph;
Var pilote,mode,i,fonte,direc,taille: Integer;
    x,y:real;

    a: char;


Begin
  pilote:=DETECT;  {Initialisation du mode graphique}
  InitGraph(pilote,mode,'c:\tp7\tp\bgi'); {Donnez le chemin du repertoire bgi}

   {**** Instructions pour tracer des lignes et changer couleur ****}

   setcolor(white);       {choisissez la couleur}
   line(10,10,200,200);   {dessine une ligne du point coordonnees (10,10)
                           au point (200,200)}
   setcolor(red);
   lineto(70,350);
   setcolor(5);           {15 max pour la couleur}
   lineto(500,350);       {Trace une ligne à partir du dernier point}

   putpixel(400,50,yellow); {dessine un point jaune en haut a droite ecran}

     {******  Affichage du texte ******}
   fonte:=2;    {0 α 4}
   direc:=0;    {0 ou 1}
   taille:=8;   {facteur d'agrandissement}
   setcolor(blue);
   settextstyle(fonte,direc,taille);
   outtextXY(100,50,'Appuyez sur une touche :'); {Ne pas utiliser writeln !!}
   a:=readkey;

     {******* Courbe sinus ********}
   x:=0;
   for i:=0 to 1000 do
   begin
     x:=x+0.05;
     y:=100*sin(x);    {Pour avoir une courbe sinus}
     putpixel(trunc(x*10),200-trunc(y),yellow); {trunc renvoie la partie entiere}
   end;

  a:=readkey;
  closeGraph;         {Ferme le mode Graphique}
End.



CapturΘ par MemoWeb α partir de http://www.guetali.fr/home/creole/debutant.htm le 10/02/97